import requests
class LlmClient:
    '''
    与LLM服务器交互的类。
    '''
    def __init__(self, url, headers, model):
        '''
        初始化LLM客户端。
        
        参数:
            url (str): LLM服务器的URL。
            headers (dict): 请求头，包含认证信息等。
            data (dict): 请求数据，包含模型输入参数、查询等。
        '''
        self.url = url
        self.headers = headers
        self.history_chat = [{'role':'system','content':'记住assistant是你自己'}]
        self.data = {
            'model': model,
            'messages': self.history_chat # 发送的时候引用历史对话
        }

    def send_request(self, messages):
        '''
        params:
            messages (dict): 包含角色和内容的消息字典，例如 {'role': 'user', 'content': '你好'}
        return:
            dict: LLM服务器返回的响应数据。
            # 示例响应结构（占位符）
            {
                'id': '...',
                'object': 'chat.completion',
                'created': 0,
                'model': '...',
                'choices': [
                    {
                        'index': 0,
                        'message': {
                            'role': 'assistant',
                            'content': '...',
                            'reasoning_content': '...'
                        },
                        'finish_reason': 'stop'
                    }
                ],
                'usage': {
                    'prompt_tokens': 0,
                    'completion_tokens': 0,
                    'total_tokens': 0,
                    'completion_tokens_details': {
                        'reasoning_tokens': 0
                    }
                },
                'system_fingerprint': ''
            }
        '''
        # 再历史对话加入message
        self.history_chat.append(messages)
        response = requests.post(self.url, headers=self.headers, json=self.data)
        self.history_chat.append(response.json()['choices'][0]['message']) 
        return response.json()

    # 定义为异步函数
    def multi_range_chat(self):
        '''
        多轮对话函数，用于与LLM服务器交互。

            prompt (str):从客户端获取用户提示词
            history_chat (list[dict]): 默认为空，但允许用户传入其他历史对话。

        返回:
            str: LLM服务器返回的最后一轮对话回复。
        '''
        while True:
            # self.history_chat.append(user_prompt)
            this_prompt = {'role':'user','content': input("请输入这次的提示词：")}
            
            self.send_request(this_prompt)
            # self.history_chat.append(response) # 将answer方的角色、思考、回复添加到历史对话数组中
            print(self.history_chat[-1]) # answer方的角色、思考、回复
            if input("是否继续对话？(y/n)") == 'n':
                break

if __name__ == '__main__':
    # 初始化llmclient就应该声明的东西
    url = "https://api.siliconflow.cn/v1/chat/completions" # 去哪找llm
    headers = {
        "Authorization": "Bearer sk-qstxvnwncinymkyuxnsyxvwujurekrazkepzvbzwzhqmkdtn", # 用谁的钱找llm
        "Content-Type": "application/json" # 你们之间的对话用什么格式
        } 
    client = LlmClient(url, headers, model="Qwen/Qwen3-VL-8B-Thinking")
    response_single = client.multi_range_chat()
    # response_single = client.send_request({'role':'user','content':'hello'})
    # 查询历史对话
    print(response_single)








